WOLF core
WOLF: A Modular Estimation Framework for Robotics
XXXXXXXXXXXXXXXXXXXXXXXXvoid(0)" frameborder="0" name="MSearchResults" id="MSearchResults">
capture_motion.h
Go to the documentation of this file.
1// WOLF - Copyright (C) 2020-2026
2// Institut de Robòtica i Informàtica Industrial, CSIC-UPC.
3// Authors: Joan Solà Ortega (jsola@iri.upc.edu) and
4// Joan Vallvé Navarro (jvallve@iri.upc.edu)
5// All rights reserved.
6//
7// This file is part of WOLF: http://www.iri.upc.edu/wolf
8// WOLF is free software: you can redistribute it and/or modify
9// it under the terms of the GNU General Public License version 3
10// as published by the Free Software Foundation.
11//
12// This program is distributed in the hope that it will be useful,
13// but WITHOUT ANY WARRANTY; without even the implied warranty of
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15// GNU General Public License for more details.
16//
17// You should have received a copy of the GNU General Public License
18// along with this program. If not, see <http://www.gnu.org/licenses/>.
19#pragma once
20
21// Wolf includes
24
25// STL includes
26#include <list>
27#include <algorithm>
28#include <iterator>
29#include <utility>
30
31namespace wolf
32{
34
54{
55 public:
56 CaptureMotion(const std::string& _type,
57 const TimeStamp& _ts,
58 SensorBasePtr _sensor_ptr,
59 const Eigen::VectorXd& _data,
60 CaptureBasePtr _capture_origin_ptr,
61 const TypeComposite& _state_types = {},
62 const VectorComposite& _state_vectors = {},
63 const PriorComposite& _state_priors = {});
64
65 CaptureMotion(const std::string& _type,
66 const TimeStamp& _ts,
67 SensorBasePtr _sensor_ptr,
68 const Eigen::VectorXd& _data,
69 const Eigen::MatrixXd& _data_cov,
70 CaptureBasePtr _capture_origin_ptr,
71 const TypeComposite& _state_types = {},
72 const VectorComposite& _state_vectors = {},
73 const PriorComposite& _state_priors = {});
74
75 ~CaptureMotion() override;
76
77 // Type
78 bool isMotion() const override
79 {
80 return true;
81 }
82
83 // Data
84 const Eigen::VectorXd& getData() const;
85 const Eigen::MatrixXd& getDataCovariance() const;
86 void setData(const Eigen::VectorXd& _data);
87 void setDataCovariance(const Eigen::MatrixXd& _data_cov);
88
89 // Buffer
91 const MotionBuffer& getBuffer() const;
92
93 // Buffer's initial conditions for pre-integration
94 Eigen::VectorXd getCalibrationPreint() const;
95 void setCalibrationPreint(const Eigen::VectorXd& _calib_preint);
96 Eigen::MatrixXd getJacobianCalib() const;
97 Eigen::MatrixXd getJacobianCalib(const TimeStamp& _ts) const;
98
99 // Get delta preintegrated, and corrected for changes on calibration params
100 Eigen::VectorXd getDeltaPreint() const;
101 Eigen::VectorXd getDeltaPreint(const TimeStamp& _ts) const;
102 Eigen::MatrixXd getDeltaPreintCov() const;
103 Eigen::MatrixXd getDeltaPreintCov(const TimeStamp& _ts) const;
104
105 // Origin frame and capture
106 CaptureBasePtr getOriginCapture();
107 CaptureBaseConstPtr getOriginCapture() const;
108 void setOriginCapture(CaptureBasePtr _capture_origin_ptr);
109
110 bool containsTimeStamp(const TimeStamp& _ts, double _time_tolerance) const;
111
112 void printHeader(int depth, //
113 bool factored_by, //
114 bool metric, //
115 bool state_blocks,
116 std::ostream& stream,
117 std::string _tabs = "") const override;
118
119 // member data:
120 private:
121 Eigen::VectorXd data_;
122 Eigen::MatrixXd data_cov_;
123 Eigen::VectorXd calib_preint_;
124 MotionBuffer buffer_;
125 CaptureBaseWPtr capture_origin_ptr_;
126};
127
128inline const Eigen::VectorXd& CaptureMotion::getData() const
129{
130 return data_;
131}
132
133inline const Eigen::MatrixXd& CaptureMotion::getDataCovariance() const
134{
135 return data_cov_;
136}
137
138inline void CaptureMotion::setData(const Eigen::VectorXd& _data)
139{
140 assert(_data.size() == data_.size() && "Wrong size of data vector!");
141 data_ = _data;
142}
143
144inline void CaptureMotion::setDataCovariance(const Eigen::MatrixXd& _data_cov)
145{
146 assert(_data_cov.rows() == data_cov_.rows() && "Wrong number of rows of data vector!");
147 assert(_data_cov.cols() == data_cov_.cols() && "Wrong number of cols of data vector!");
148 data_cov_ = _data_cov;
149}
150
152{
153 return buffer_;
154}
155
157{
158 return buffer_;
159}
160
161inline Eigen::MatrixXd CaptureMotion::getJacobianCalib() const
162{
163 return getBuffer().back().jacobian_calib_;
164}
165
166inline Eigen::MatrixXd CaptureMotion::getJacobianCalib(const TimeStamp& _ts) const
167{
168 return getBuffer().getMotion(_ts).jacobian_calib_;
169}
170
171inline wolf::CaptureBasePtr CaptureMotion::getOriginCapture()
172{
173 return capture_origin_ptr_.lock();
174}
175
176inline wolf::CaptureBaseConstPtr CaptureMotion::getOriginCapture() const
177{
178 return capture_origin_ptr_.lock();
179}
180
181inline void CaptureMotion::setOriginCapture(CaptureBasePtr _capture_origin_ptr)
182{
183 capture_origin_ptr_ = _capture_origin_ptr;
184}
185
186inline Eigen::VectorXd CaptureMotion::getCalibrationPreint() const
187{
188 return calib_preint_;
189}
190
191inline void CaptureMotion::setCalibrationPreint(const Eigen::VectorXd& _calib_preint)
192{
193 calib_preint_ = _calib_preint;
194}
195
196inline Eigen::VectorXd CaptureMotion::getDeltaPreint() const
197{
198 return getBuffer().back().delta_integr_;
199}
200
201inline Eigen::VectorXd CaptureMotion::getDeltaPreint(const TimeStamp& _ts) const
202{
203 return getBuffer().getMotion(_ts).delta_integr_;
204}
205
206inline Eigen::MatrixXd CaptureMotion::getDeltaPreintCov() const
207{
208 return getBuffer().back().delta_integr_cov_;
209}
210
211inline Eigen::MatrixXd CaptureMotion::getDeltaPreintCov(const TimeStamp& _ts) const
212{
214}
215
216} // namespace wolf
Definition: capture_base.h:39
Base class for motion Captures.
Definition: capture_motion.h:54
~CaptureMotion() override
Definition: capture_motion.cpp:59
void printHeader(int depth, bool factored_by, bool metric, bool state_blocks, std::ostream &stream, std::string _tabs="") const override
Print the header information of the capture.
Definition: capture_motion.cpp:89
const Eigen::VectorXd & getData() const
Definition: capture_motion.h:128
bool isMotion() const override
Is a motion if there is motion detected.
Definition: capture_motion.h:78
void setData(const Eigen::VectorXd &_data)
Definition: capture_motion.h:138
const Eigen::MatrixXd & getDataCovariance() const
Definition: capture_motion.h:133
MotionBuffer & getBuffer()
Definition: capture_motion.h:156
Eigen::VectorXd getDeltaPreint() const
Definition: capture_motion.h:196
void setOriginCapture(CaptureBasePtr _capture_origin_ptr)
Definition: capture_motion.h:181
CaptureBasePtr getOriginCapture()
Definition: capture_motion.h:171
void setCalibrationPreint(const Eigen::VectorXd &_calib_preint)
Definition: capture_motion.h:191
Eigen::MatrixXd getDeltaPreintCov() const
Definition: capture_motion.h:206
Eigen::MatrixXd getJacobianCalib() const
Definition: capture_motion.h:161
bool containsTimeStamp(const TimeStamp &_ts, double _time_tolerance) const
Definition: capture_motion.cpp:64
void setDataCovariance(const Eigen::MatrixXd &_data_cov)
Definition: capture_motion.h:144
CaptureMotion(const std::string &_type, const TimeStamp &_ts, SensorBasePtr _sensor_ptr, const Eigen::VectorXd &_data, CaptureBasePtr _capture_origin_ptr, const TypeComposite &_state_types={}, const VectorComposite &_state_vectors={}, const PriorComposite &_state_priors={})
Definition: capture_motion.cpp:23
Eigen::VectorXd getCalibrationPreint() const
Definition: capture_motion.h:186
class for motion buffers.
Definition: motion_buffer.h:89
const Motion & getMotion(const TimeStamp &_ts) const
Definition: motion_buffer.cpp:85
TimeStamp implements basic functionalities for time stamps.
Definition: time_stamp.h:39
Definition: vector_composite.h:27
Definition: capture_base.h:23
WOLF_PTR_TYPEDEFS(CaptureLandmarksExternal)
Eigen::VectorXd delta_integr_
the integrated motion or delta-integral
Definition: motion_buffer.h:38
Eigen::MatrixXd jacobian_calib_
Jacobian of delta_integr wrt extra states (TBD by the derived processors)
Definition: motion_buffer.h:42
Eigen::MatrixXd delta_integr_cov_
covariance of the integrated delta
Definition: motion_buffer.h:39